package net.sf.rose.jdbc.bean.annotation;

import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Inherited;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * 注解：标识类字段名与数据库表字段名的对应
 * @author fengjian
 * @since 2013/07/06
 */
@Inherited
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)
public @interface Column {

	/**
	 * 数据库字段名称
	 * 如果为空，则使用类的属性名
	 * @return 字段名称
	 */
	String name() default "";

	/**
	 * 字段类型
	 * 如果没有定义此项值有以下二种情况：
	 * 1：数据类型是用户自定义对象类型或List类型
	 * 2：默认采用变长文本
	 * @return 字段类型
	 */
	Type type() default Type.变长文本;

	/**
	 * 字段说明
	 * @return 字段说明
	 */
	String description() default "";

	/**
	 * 长度(整数位数)
	 * 如果是数字型则要填写，默认值是10
	 * @return 长度(整数位数)
	 */
	int size() default 0;

	/**
	 * 小数长度
	 * 如果是精确数字型则要填写，默认值是2
	 * @return 小数长度
	 */
	int scale() default 0;

	/**
	 * 是否主键
	 * @return 是否主键
	 */
	boolean pk() default false;

	/**
	 * 生成策略
	 * 默认无生成策略
	 * @return 生成策略
	 */
	String policy() default "";

	/**
	 * 允许空值
	 * 默认允许为空
	 * @return 允许空值
	 */
	boolean canNull() default true;

	/**
	 * 默认值
	 * @return 默认值
	 */
	String defaultValue() default "";
}
